<?php
include('../includes/config.php');
include DIR_INCLUDES_FT.'bootstrap.php';

set_time_limit(600);
ini_set('memory_limit', '256M');

$ficheiros = array("8" => "quiosque_merge.csv");

$conection->beginTransaction();

foreach ($ficheiros as $loja => $ficheiro) {
	
	$contagem = new Contagens();
	$contagem->data_inicio = "2009-07-01 00:00:00";
	$contagem->data_fim = "2009-07-01 00:00:00";
	$contagem->loja_id = $loja;
	$contagem->save();
	
	$file=fopen($ficheiro,"r") or exit("Unable to open file!");
	
	$codigos_lidos = array();
	$ultima_contagem_produto = false;
	$ultimo_codigo_lido = false;
	
	$num_linhas = 0;
	
	while (!feof($file)){
		$linha = explode(";",fgets($file));
		$linha[0] = str_replace(" ", "", $linha[0]);
		$linha[0] = str_replace("\n", "", $linha[0]);
		$linha[0] = str_replace("\r", "", $linha[0]);
		
		if($linha[0] != ''){
			$num_linhas++;
			$query = new Doctrine_Query();
			$codigo = $query->from("CodigosBarras")->where("codigo_barras = ?",array($linha[0]))->execute()->getFirst();
			$query->free();
			
			switch ($codigo->tipo_codigo){
				case 1:
					$query_produto = new Doctrine_Query();
					$codigo_produto = $query_produto->from("CodigosBarrasProdutos")->where("codigo_barras_id = ?",array($codigo->id))->execute()->getFirst();
					$query_produto->free();
	
					$query_contagem = new Doctrine_Query();
					$query_contagem->from("ContagensProdutos c")->where("c.contagem_id = ? and c.codigo_barras_produto_id = ? and ceil(c.quantidade) = c.quantidade", array($contagem->id, $codigo_produto->codigo_barras_id));
					$ultima_contagem_produto = $query_contagem->execute()->getFirst();
					$query_contagem->free();
					
					if ($ultima_contagem_produto){
						$ultima_contagem_produto->quantidade++;
					} else {
						$ultima_contagem_produto = new ContagensProdutos();
						$ultima_contagem_produto->contagem_id = $contagem->id;
						$ultima_contagem_produto->codigo_barras_produto_id = $codigo_produto->codigo_barras_id;
						$ultima_contagem_produto->quantidade = 1;
					}
					$ultima_contagem_produto->save();
					$ultimo_codigo_lido = $codigo_produto->codigo_barras_id;
				break;
				case 2:
					if ($ultimo_codigo_lido){
						$query_produto = new Doctrine_Query();
						$query_produto->from("ContagensProdutos")->where("contagem_id = ? and codigo_barras_produto_id = ? and ceil( quantidade ) = quantidade", array($contagem->id, $ultimo_codigo_lido));
						$contagem_produto_alterar = $query_produto->execute()->getFirst();
						$query_produto->free();
						
						$query_porcao = new Doctrine_Query();
						$codigo_porcao = $query_porcao->from("CodigosBarrasPorcoes")->where("codigo_barras_id = ?",array($codigo->id))->execute()->getFirst();
						$query_porcao->free();
						
						if((int)$codigo_porcao->porcao != 0 && is_int((int)$codigo_porcao->porcao)){
							$contagem_produto_alterar->quantidade += $codigo_porcao->porcao;
						} else {
							if ($contagem_produto_alterar->quantidade == 1){
								$contagem_produto_alterar->quantidade = $codigo_porcao->porcao;
							} else {
								$contagem_produto_alterar->quantidade--;
								$contagem_porcao = new ContagensProdutos();
								$contagem_porcao->contagem_id = $contagem->id;
								$contagem_porcao->codigo_barras_produto_id = $codigo_produto->codigo_barras_id;
								$contagem_porcao->quantidade = $codigo_porcao->porcao;
								$contagem_porcao->save();
							}
							$ultimo_codigo_lido = false;
						}
						$contagem_produto_alterar->save();
					} else {
						$conection->rollback();
						echo $num_linhas."<br />";
						echo $ficheiro."<br />";
						die("Error!!!!!! Porção sem codigo :|");
					}
				break;
				default:
					/*echo $linha[0]."<br />";
					echo $num_linhas."<br />";
					die("WTF?");*/
				break;
			}
		}
	}
	
	echo $ficheiro." numero de linhas lidas: ".$num_linhas."<br />";

	fclose($file);
}

$conection->commit();

/*SELECT *, ROUND(SUM(quantidade), 2) as total FROM contagens_produtos c 
INNER JOIN codigos_barras_produtos cp ON (cp.codigo_barras_id = c.codigo_barras_produto_id)
INNER JOIN produtos p ON (p.id = cp.produto_id)
INNER JOIN categorias cat ON (cat.id = p.categoria_id)
WHERE contagem_id = 1 GROUP BY codigo_barras_produto_id*/


/*
 SELECT *,ROUND(SUM(quantidade), 2) as total FROM produtos p
INNER JOIN categorias c ON (c.id = p.categoria_id)
INNER JOIN codigos_barras_produtos cp ON (p.id = cp.produto_id)
LEFT JOIN contagens_produtos coun ON (coun.codigo_barras_produto_id = cp.codigo_barras_id)
WHERE coun.contagem_id is NULL or coun.contagem_id = 1
GROUP BY p.id
 */

/*
 SELECT * FROM produtos p
INNER JOIN categorias c ON (c.id = p.categoria_id)
INNER JOIN codigos_barras_produtos cp ON (p.id = cp.produto_id)
GROUP BY p.id

IsNull(contagem_id,-1)  ?????
*/

/** KOCH
 SELECT count(contagem_id) -- ,ROUND(SUM(quantidade), 2) as total
FROM produtos p
INNER JOIN categorias c ON (c.id = p.categoria_id)
INNER JOIN codigos_barras_produtos cp ON (p.id = cp.produto_id)
LEFT JOIN contagens_produtos coun ON (coun.codigo_barras_produto_id = cp.codigo_barras_id)
where coun.contagem_id != 1 AND contagem_id is not null
GROUP BY p.id;
 */
?>